package cn.tedu.springmvc2.controller;

import cn.tedu.springmvc2.mapper.UserMapper;
import cn.tedu.springmvc2.pojo.entity.User;
import cn.tedu.springmvc2.response.JsonResult;
import cn.tedu.springmvc2.response.StatusCode;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@RestController
@Api(tags = "01-用户模块")
public class UserController {
    @Autowired
    private UserMapper userMapper;

//    @RequestMapping("/login")
    @PostMapping("/login")
    @ResponseBody
    @ApiOperation(value = "登录功能")
    public JsonResult login(String username, String password) {
        User user = userMapper.selectByUsername(username);
        //事先判断一下user 也就是指前端是否有值传递过来
//        try {
//            if(username.isEmpty()){
//                throw new NullPointerException("参数效验失败");
//            }
//        } catch (NullPointerException e) {
//            return new JsonResult(StatusCode.VALIDATE_ERROR);
//        }
        /**
         * \\d  代表一个数字字符
         * 其中 \\ 是Java字符串中的转义字符
         * 表示正则表达式中的 \d
         * 在正则表达式中    \d 匹配任何数字，即0到9之间的任何单个数字
         * +  是一个量词，表示前面的模式元素（在这里是 \d）出现一次或多次。
         *
         * 整个正则表达式 \\d+ 匹配一个或多个连续的数字字符
         ···············································
         * matches() 是Java中 String 类的一个方法
         * 用于检查整个字符串是否匹配给定的正则表达式
         * 如果整个字符串都匹配给定的正则表达式，则返回 true   否则返回 false。
         *
         * 检查 username 是否仅由数字组成
         * 如果 username 仅由数字组成
         * matches() 方法将返回 true，否则返回 false
         * */
        if (username.matches("\\d+")){
            throw new RuntimeException("参数效验异常");
        }
        if (user == null) {
//            return "用户名不存在";
            return  new JsonResult(StatusCode.USERNAME_ERROR);
        }
        if(user.getPassword().equals(password)){
//            return "登录成功" ;
            return new JsonResult(StatusCode.LOGIN_SUCCESS);
        }
//        return "密码错误";
        return new JsonResult(StatusCode.PASSWORD_ERROR);
    }

//    @RequestMapping("/reg")
    @PostMapping("/reg")
    @ApiOperation(value = "注册功能")
    public JsonResult reg(@RequestBody User user) {
        User byUserName = userMapper.selectByUsername(user.getUsername());
        if (byUserName != null){
//            return "用户名已存在";
            return new JsonResult(StatusCode.USERNAME_ALREADY_EXISTS);
        }
        int rows = userMapper.insert(user);
        if (rows > 0){
//            return "注册成功";
            return JsonResult.ok();
        }else {
//            return "注册失败";
            return new JsonResult(StatusCode.OPERATION_FAILED);
        }
    }
}
